package jvm.c5_gc;

//-XX:-DoEscapeAnalysis -XX:-EliminateAllocations -XX:-UseTLAB -Xlog:c5_gc*
// 逃逸分析 标量替换 线程专有对象分配

/*
* 对象内存
* 栈上分配（分配在栈上就不需要GC）
*   线程私有的小对象
*   无逃逸
*   支持标量替换
*
* 线程本地分配TLAB（Thread Local Allocation Buffer）
*   占用eden区,默认1%
*   多线程的时候不用竞争eden区就可以申请空间，提高效率
*   小对象
*
* 老年代
*   大对象
*
*  eden
* */

public class TestTLAB {
    //User u;
    class User {
        int id;
        String name;

        public User(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }

    void alloc(int i) {
        new User(i, "name " + i);
    }

    public static void main(String[] args) {
        TestTLAB t = new TestTLAB();
        long start = System.currentTimeMillis();
        for(int i=0; i<1000_0000; i++) t.alloc(i);
        long end = System.currentTimeMillis();
        System.out.println(end - start);

        //for(;;);
    }
}
